package cn.okcode.slowjson.ast;

import cn.okcode.slowjson.parser.Visitor;

/**
 * @author pyk13
 */
public abstract class AbstractNode<T> {

    protected AbstractNode<?> parent;

    protected NodeContext context;

    public NodeContext getContext() {
        return context;
    }

    public AbstractNode<?> getParent() {
        return parent;
    }

    public void setContext(NodeContext context) {
        this.context = context;
    }

    /**
     * 获取节点值
     *
     * @return 节点值
     */
    public abstract T getValue();

    /**
     * 获取节点值的字符串标识形式
     *
     * @return 节点值的字符串标识
     */
    public abstract String stringValue();

    /**
     * 接收访问者
     * <p>
     * 使用访问者的visit方法对当前节点进行访问
     *
     * @param visitor 访问者
     */
    public abstract void accept(Visitor visitor);
}
